package com.matrix.review.service;

import com.matrix.api.review.dto.ReviewDTO;
import com.matrix.api.review.dto.ReviewReplyDTO;
import com.matrix.api.review.vo.ReviewVO;
import com.matrix.common.domain.PageResult;

/**
 * @author 有点甜
 * @since 2025/7/27
 */
public interface ReviewService {

    /**
     * 提交评论
     * @param userId 用户ID
     * @param reviewDTO 评论信息
     */
    void submitReview(Long userId, ReviewDTO reviewDTO);

    /**
     * 回复评论
     * @param userId 用户ID
     * @param reviewId 评论ID
     * @param replyDTO 回复信息
     */
    void replyToReview(Long userId, Long reviewId, ReviewReplyDTO replyDTO);

    /**
     * 通用的评价列表查询方法
     * @param id   根据 type 的不同，可以是 shopId 或 userId
     * @param type 查询类型, "SHOP" 或 "USER"
     * @param pageNum  页码
     * @param pageSize 每页数量
     * @param filter   过滤条件,"ALL", "GOOD", "BAD"
     * @return 分页的评价VO列表
     */
    PageResult<ReviewVO> getReviews(Long id, String type, int pageNum, int pageSize, String filter);

    /**
     * 根据商户ID获取商户的评价列表
     * @param merchantUserId 商户ID
     * @param pageNum 页码
     * @param pageSize 每页数量
     * @param filter 过滤条件,"ALL", "GOOD", "BAD"
     * @return 分页的评价VO列表
     */
    PageResult<ReviewVO> getReviewsForMerchant(Long merchantUserId, int pageNum, int pageSize, String filter);
}
